package com.ruoyi.app.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.app.domain.AppAsset;
import com.ruoyi.app.domain.bo.AppAssetBo;
import com.ruoyi.app.domain.bo.BuyGoodsBo;
import com.ruoyi.app.domain.vo.AppAssetVo;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * APP用户资产信息Service接口
 *
 * @author ruoyi
 * @date 2025-12-09
 */
public interface IAppAssetService {

    /**
     * 查询APP用户资产信息
     */
    AppAssetVo queryById(Long id);


    AppAssetVo queryByUid(Long uid);

    /**
     * 查询APP用户资产信息列表
     */
    TableDataInfo<AppAssetVo> queryPageList(AppAssetBo bo, PageQuery pageQuery);

    /**
     * 查询APP用户资产信息列表
     */
    List<AppAssetVo> queryList(AppAssetBo bo);

    /**
     * 查询APP用户资产信息列表
     * @param wrapper 查找条件
     * @return
     */
    List<AppAssetVo> queryList(LambdaQueryWrapper<AppAsset> wrapper);

    /**
     * 新增APP用户资产信息
     */
    Boolean insertByBo(AppAssetBo bo);


    /**
     * 新增APP用户资产信息
     */
    Boolean insert(Long userId);

    /**
     * 修改APP用户资产信息
     */
    Boolean updateByBo(AppAssetBo bo);

    /**
     * 校验并批量删除APP用户资产信息信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);


    /**
     * 增加资产
     *
     * @param uid
     * @param amount
     */
    Boolean addBalance(Long uid, BigDecimal amount);

    /**
     * 增加积分
     *
     * @param uid
     * @param amount
     */
    Boolean addIntegral(Long uid, BigDecimal amount);


    /**
     * 增加贡献度
     *
     * @param uid
     * @param amount
     */
    Boolean addContribution(Long uid, BigDecimal amount);

    /**
     * 增加活跃度
     *
     * @param uid 用户ID
     * @param amount 增加活跃度
     */
    Boolean addLiveness(Long uid, BigDecimal amount);

    /**
     * 减少活跃度
     *
     * @param uid 用户ID
     * @param amount 减少活跃度
     */
    Boolean subLiveness(Long uid, BigDecimal amount);



    /**
     * 减少资产
     *
     * @param uid
     * @param amount
     */
    Boolean subtractBalance(Long uid, BigDecimal amount);

    /**
     * 减少积分
     * @param uid
     * @param amount
     * @return
     */
    Boolean subtractIntegral(Long uid, BigDecimal amount);

    /**
     * 增加活跃度
     * @param id
     * @param i
     */
    void addLiveIfAbsent(Long id, int i);

    boolean subContribution(Long userId, BigDecimal transferEndNumber);

    Boolean freeze(Long userId);

    List<AppAsset> selFee();

    void unfreeze(Long userId);

    void buyGoods(BuyGoodsBo buyGoodsBo);

    void coverBalance(BuyGoodsBo buyGoodsBo);
}
